With the advancement of telecommunication technologies, many types of devices can be used for different communication purposes. For example, a cellular phone can be used not only for making phone calls but also for connecting to the Internet to, for instance, check email or download information. Different devices may support varying platforms. For an application to run on a specific device, an application developer needs to take into account of the platform capabilities that the specific device supports. For example, if a cellular phone has very limited screen display capability, the application developer of an application designed to communicate a message (e.g., an email message) to a user may utilize speech capability supported by the cellular phone to convey a textual message. The same application that communicates a message to a user may also be deployed on a personal data assistant (PDA) that supports graphics capability for screen display purposes. The variation of the application deployed on the PDA may, instead, utilize the text display capability of the PDA platform to convey a message to a user via a window.
Different functionalities may be implemented as loadable code modules corresponding to assemblies. An assembly may include meta data that is necessary for loading and executing the corresponding executable assembly. A particular functionality of an application may be realized as a set of assemblies, each of which corresponding to an implementation associated with a specific platform capability. For example, the functionality of communicating a textual message to a user may be implemented as two assemblies, one of which is to convey the textual message to a user via window display and the other of which is to convey the message to the user via speech. Depending on the specific platform capability supported on a device where the functionality is deployed, the corresponding assembly may be installed. This is static and the determination may be performed prior to the installation of the functionality. The underlying application may need to be compiled as separate versions corresponding to different platform capabilities. In addition, when the device changes its platform capabilities, different assemblies of the functionality may have to be reinstalled to match the updated platform capabilities.